package edu.hawaii.senin.iclouds.basics;

/**
 * Defines Common methods for specie.
 * 
 * @author Pavel Senin
 * 
 * 
 */
public interface Specie {

  /**
   * Sets the specie AMU.
   * 
   * @param atomic mass unit value to set.
   */
  public void setAmu(Double amu);

  /**
   * Gets the specie AMU.
   * 
   * @return atomic mass unit value
   */
  public Double getAmu();

  /**
   * Sets the specie abundance.
   * 
   * @param abundance abundance to set.
   */
  public void setAbundance(Double abundance);

  /**
   * Gets the specie abundance.
   * 
   * @return abundance.
   */
  public Double getAbundance();

  /**
   * Sets the atom velocity.
   * 
   * @param velocity value to set.
   */
  public void setVelocity(Double velocity);

  /**
   * Gets the atom velocity.
   * 
   * @return velocity value.
   */
  public Double getVelocity();

  /**
   * Gets the specie name.
   * 
   * @param Name name to set.
   */
  public void setName(String Name);

  /**
   * Returns the specie name.
   * 
   * @return specie name.
   */
  public String getName();

  /**
   * Sets Atomic fraction of abundance.
   * 
   * @param fraction value to set.
   */
  public void setFraction(Double fraction);

  /**
   * Returns atomic fraction.
   * 
   * @return atomic fraction.
   */
  public Double getFraction();

  /**
   * Computes accretion rate the gas specie.
   * 
   * @param grainSize grain size.
   * @return accretion rate.
   */
  public Double getRate(Double grainSize);

  /**
   * Sets accretion probability.
   * 
   * @param ratesSum sum of overall accretion rates.
   */
  public void setAccretionProbability(Double ratesSum);

  /**
   * Gets accretion probability.
   * 
   * @return accretion probability value.
   */
  public Double getAccretionProbability();

  /**
   * Reports accumulator vale. Used to keep number of species using accretion or evaporation
   * process.
   * 
   * @return accumulator value.
   */
  public Long getAccumulatorValue();

  /**
   * Sets accumulator value for the specie.
   * 
   * @param value value to set.
   */
  public void setAccumulatorValue(Long value);

  /**
   * Increments accumulator value.
   * 
   * @param inc value to increment on.
   */
  public void incrementAccumulatorValue(Long inc);

  /**
   * Makes a clone of the specie object.
   * 
   * @return full specie clone.
   */
  public Specie clone();

  /**
   * Decrements accumulator value.
   * 
   * @param dec value to increment on.
   */
  public void decrementAccumulatorValue(long dec);

  /**
   * Sets the type of specie - active or passive, i.e. would it react on surface when accreted or
   * would it stay there and wait.
   * 
   * @param type the type 'active' or 'passive'.
   */
  public void setType(String type);

  /**
   * Reports type of the specie.
   * 
   * @return type of the specie.
   */
  public String getType();

  /**
   * Dumps current specie in text buffer.
   * 
   * @return text representation of specie.
   */
  public String toText();

  /**
   * Reports whether or not this specie would react on surface.
   * 
   * @return specie reactiveness.
   */
  public boolean isActive();
}